package top.kangyaocoding.ecommerce.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * 描述: 通用常量
 *
 * @author K·Herbert
 * @since 2025-02-16 下午3:26
 */
public class Constants {

    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public enum ErrorCode {
        /**
         * 调用成功
         */
        SUCCESS("0000", "调用成功"),
        /**
         * 调用失败
         */
        UN_ERROR("0001", "调用失败"),
        /**
         * 非法参数
         */
        ILLEGAL_PARAMETER("0002", "非法参数"),
        /**
         * 未登录
         */
        NO_LOGIN("0003", "未登录"),
        /**
         * 登录异常
         */
        LOGIN_ERROR("0004", "登录异常"),
        /**
         * 注册异常
         */
        REGISTER_ERROR("0005", "注册异常"),
        /**
         * 验证码异常
         */
        VERIFICATION_CODE_ERROR("0006", "验证码异常"),
        /**
         * token异常
         */
        TOKEN_ERROR("0007", "token异常"),
        /**
         * 用户不存在
         */
        USER_NOT_EXIST("0008", "用户不存在"),
        /**
         * 用户已存在
         */
        USER_EXIST("0009", "用户已存在"),

        /**
         * 用户密码错误
         */
        USER_PASSWORD_ERROR("0010", "用户密码错误"),
        /**
         * 数据返回为空
         */
        DATA_NOT_FOUND("0011", "数据返回为空"),
        /**
         * 请求过于频繁
         */
        TOO_MANY_REQUESTS("0012", "请求过于频繁，请稍后再试！"),
        /**
         * 服务器繁忙，请稍后再试
         */
        SERVER_BUSY("0013", "服务器繁忙，请稍后再试"),
        /**
         * 不支持的文件类型（头像）
         */
        UNSUPPORTED_AVATAR_FILE_TYPE("0014", "仅支持 gif, png, jpg, jpeg, webp 格式的图片"),
        /**
         * 更新用户头像失败，文件大小超过 3MB
         */
        UNSUPPORTED_AVATAR_FILE_SIZE("0015", "更新用户头像失败，文件大小超过 3MB"),
        /**
         * 用户权限不足
         */
        UNAUTHORIZED("0016", "用户权限不足"),
        /**
         * 用户状态冻结
         */
        USER_STATUS_FROZEN("0017", "用户状态冻结，请联系管理员审核"),
        ;

        private String code;
        private String info;
    }

    /**
     * JWT 过期时间 24h
     */
    public static final long JWT_EXPIRATION_TIME = 24 * 3600 * 1000;
    /**
     * 验证码过期时间 3m
     */
    public static final long VERIFICATION_CODE_EXPIRATION_TIME = 3 * 60 * 1000;
    /**
     * 验证码 Redis Key
     */
    public static final String VERIFICATION_CODE_KEY = "verification_code:";
    /**
     * 用户信息 Redis Key
     */
    public static final String USER_INFO_KEY = "user_info:";
    /**
     * 默认密码
     */
    public static final String DEFAULT_PASSWORD = "123456";
    /**
     * 用户信息过期时间 12h
     */
    public static final long USER_INFO_EXPIRATION_TIME = 12 * 3600 * 1000;

    /**
     * 限流器 Redis Key
     */
    public static final String RATE_LIMITER_KEY = "rate_limiter:";

    /**
     * 黑名单 Redis Key
     */
    public static final String BLACKLIST_KEY = "blacklist:";

    /**
     * 默认对话模型
     */
    public static final String DEFAULT_MODEL = "qwen-omni-turbo-latest";

    /**
     * 智能建议模板
     */
    public static final String SUGGESTION_TEMPLATE =
            """
                            请以简体中文语言输出以下两部分内容，并严格按照以下格式分隔，不含其他任何说明或格式：
                    
                            分析目标：[具体图片主要内容]
                    
                            1. 数据关键特征分析：[换行]（分号分隔，需要输出标题）
                            [用分号分隔的3-5个数据描述点，如：'Q3销售额同比+12%;客户流失率上升3%;高净值客户占比不足5%' ]
                    
                            2. 优先级行动建议：[换行]（编号列表3-5个，需要输出标题）
                            [具体行动项（1）如：优化高净值客户个性化服务方案]
                            [具体行动项（2）如：分析流失客户共性特征并设计留存策略]
                            [具体行动项（3）如：增加Q4促销活动预算...]
                            [具体行动项（4）...]
                            限制条件：
                            总输出不超过300字
                            直接输出结果，无解释性语句
                            不使用markdown格式
                            不添加[建议结束]等结束标记
                    """;
}
